package metadata

import (
	"time"
)

// DocumentMetadata 文档元数据结构
type DocumentMetadata struct {
	// 基本信息
	Title      string    `json:"title"`       // 文档标题
	Author     string    `json:"author"`      // 作者
	CreatedAt  time.Time `json:"created_at"`  // 创建时间
	ModifiedAt time.Time `json:"modified_at"` // 修改时间
	Language   string    `json:"language"`    // 语言
	Encoding   string    `json:"encoding"`    // 编码格式

	// 内容摘要
	Summary  string   `json:"summary"`  // 自动生成摘要
	Keywords []string `json:"keywords"` // 关键词
	Tags     []string `json:"tags"`     // 标签
	Category string   `json:"category"` // 分类

	// 文档结构
	WordCount int      `json:"word_count"` // 字数统计
	LineCount int      `json:"line_count"` // 行数统计
	Headings  []string `json:"headings"`   // 标题列表

	// 质量评估
	Quality    float64 `json:"quality"`    // 质量评分 (0-100)
	Confidence float64 `json:"confidence"` // 提取置信度 (0-100)

	// 扩展字段
	Custom map[string]interface{} `json:"custom"` // 自定义元数据

	// 系统字段
	ExtractedAt time.Time `json:"extracted_at"` // 提取时间
	Version     string    `json:"version"`      // 元数据版本
}

// SummaryConfig 摘要生成配置
type SummaryConfig struct {
	MaxLength     int     `json:"max_length"`     // 最大摘要长度
	MinLength     int     `json:"min_length"`     // 最小摘要长度
	SentenceCount int     `json:"sentence_count"` // 摘要句子数量
	Algorithm     string  `json:"algorithm"`      // 摘要算法 (extractive/abstractive)
	Language      string  `json:"language"`       // 语言设置
	Quality       float64 `json:"quality"`        // 质量阈值
}

// DefaultSummaryConfig 默认摘要配置
func DefaultSummaryConfig() *SummaryConfig {
	return &SummaryConfig{
		MaxLength:     200,
		MinLength:     50,
		SentenceCount: 3,
		Algorithm:     "extractive",
		Language:      "zh",
		Quality:       0.7,
	}
}

// KeywordConfig 关键词提取配置
type KeywordConfig struct {
	MaxCount  int      `json:"max_count"`  // 最大关键词数量
	MinLength int      `json:"min_length"` // 最小关键词长度
	MaxLength int      `json:"max_length"` // 最大关键词长度
	Algorithm string   `json:"algorithm"`  // 提取算法 (tfidf/textrank)
	StopWords []string `json:"stop_words"` // 停用词列表
	MinScore  float64  `json:"min_score"`  // 最小评分阈值
}

// DefaultKeywordConfig 默认关键词配置
func DefaultKeywordConfig() *KeywordConfig {
	return &KeywordConfig{
		MaxCount:  10,
		MinLength: 2,
		MaxLength: 20,
		Algorithm: "tfidf",
		StopWords: []string{"的", "了", "在", "是", "我", "有", "和", "就", "不", "人", "都", "一", "一个", "上", "也", "很", "到", "说", "要", "去", "你", "会", "着", "没有", "看", "好", "自己", "这"},
		MinScore:  0.1,
	}
}

// ExtractorConfig 元数据提取器配置
type ExtractorConfig struct {
	EnableSummary    bool           `json:"enable_summary"`    // 启用摘要生成
	EnableKeywords   bool           `json:"enable_keywords"`   // 启用关键词提取
	EnableHeadings   bool           `json:"enable_headings"`   // 启用标题提取
	EnableAuthor     bool           `json:"enable_author"`     // 启用作者提取
	SummaryConfig    *SummaryConfig `json:"summary_config"`    // 摘要配置
	KeywordConfig    *KeywordConfig `json:"keyword_config"`    // 关键词配置
	CustomExtractors []string       `json:"custom_extractors"` // 自定义提取器
}

// DefaultExtractorConfig 默认提取器配置
func DefaultExtractorConfig() *ExtractorConfig {
	return &ExtractorConfig{
		EnableSummary:    true,
		EnableKeywords:   true,
		EnableHeadings:   true,
		EnableAuthor:     true,
		SummaryConfig:    DefaultSummaryConfig(),
		KeywordConfig:    DefaultKeywordConfig(),
		CustomExtractors: []string{},
	}
}

// MetadataExtractor 元数据提取器接口
type MetadataExtractor interface {
	// Extract 提取文档元数据
	Extract(content string, filePath string, config *ExtractorConfig) (*DocumentMetadata, error)

	// ExtractSummary 提取摘要
	ExtractSummary(content string, config *SummaryConfig) (string, error)

	// ExtractKeywords 提取关键词
	ExtractKeywords(content string, config *KeywordConfig) ([]string, error)

	// ExtractHeadings 提取标题
	ExtractHeadings(content string) ([]string, error)

	// ExtractAuthor 提取作者信息
	ExtractAuthor(content string, filePath string) (string, error)

	// ValidateMetadata 验证元数据质量
	ValidateMetadata(metadata *DocumentMetadata) error
}

// MetadataStorage 元数据存储接口
type MetadataStorage interface {
	// Store 存储元数据
	Store(filePath string, metadata *DocumentMetadata) error

	// Retrieve 检索元数据
	Retrieve(filePath string) (*DocumentMetadata, error)

	// Update 更新元数据
	Update(filePath string, metadata *DocumentMetadata) error

	// Delete 删除元数据
	Delete(filePath string) error

	// List 列出所有元数据
	List() (map[string]*DocumentMetadata, error)

	// Search 搜索元数据
	Search(query string) (map[string]*DocumentMetadata, error)
}

// MetadataManager 元数据管理器接口
type MetadataManager interface {
	// ProcessFile 处理单个文件
	ProcessFile(filePath string) (*DocumentMetadata, error)

	// ProcessDirectory 处理目录
	ProcessDirectory(dirPath string, recursive bool) (map[string]*DocumentMetadata, error)

	// UpdateMetadata 更新元数据
	UpdateMetadata(filePath string, force bool) (*DocumentMetadata, error)

	// GetMetadata 获取元数据
	GetMetadata(filePath string) (*DocumentMetadata, error)

	// SearchByMetadata 根据元数据搜索
	SearchByMetadata(criteria map[string]interface{}) (map[string]*DocumentMetadata, error)

	// GetStatistics 获取统计信息
	GetStatistics() (map[string]interface{}, error)
}
